///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Στο παρόν υπάρχουν δομές και μέθοδοι που αφορούν στα κάθετα panels εργαλείων.
// Υπάρχουν δύο κάθετα panels, ένα δεξιά από την περιοχή παικτών και ένα δεξιά
// από την περιοχή τραπεζιών. Οι δομές και μέθοδοι του παρόντος αφορούν διεργασίες
// που είναι κοινές και στα δύο panels, π.χ. εναλλαγή ομάδας εργαλείων, οριζόντια
// μετακίνηση κλπ.

Kafenio.panel = {};

// Η function "enalagiButton" δέχεται ως παράμετρο ένα panel και επιστρέφει πλήκτρο
// το οποίο επιτρέπει την εναλλαγή των ομάδων εργαλείων του συγκεκριμένου panel.
// Με το πάτημα του εν λόγω πλήκτρου εμφανίζεται η επόμενη ή η προηγούμενη ομάδα
// εργαλείων, ανάλογα με τη φορά που έχει καθοριστεί από το χρήστη.

Kafenio.panel.enalagiButton = function(panel) {
	return $('<img>').attr({
		src: Client.server + 'ikona/panel/misc/4Balls.png',
		title: 'Εναλλαγή εργαλείων',
	}).
	on('click', function(e) {
		Kafenio.inputRefocus(e);
		panel.adamo += panel.direction;
		if (panel.adamo > panel.omadaMax) panel.adamo = 1;
		else if (panel.adamo < 1) panel.adamo = panel.omadaMax;
		panel.refresh();
		$(this).strofi({
			strofi: 90 * panel.direction,
			duration: 200,
		});
	});
}

// Το πλήκτρο οριζόντιας μετακίνησης βοηθά στην οριζόντια μετακίνηση του panel που
// περνάμε ως παράμετρο. Η μετακίνηση επιτελείται ως mouse grab/move/let διαδικασία
// και μπορεί να εκκινήσει σε οποιοδήποτε ελεύθερο σημείο του panel.

Kafenio.panel.metakinisiButton = function(panel) {
	return $('<img>').attr({
		src: Client.server + 'ikona/misc/baresV.png',
		title: 'Οριζόντια μετακίνηση',
	}).css('cursor', 'move').
	on('mousedown', function(e) {
		var e1;

		if (e.which != 1) return;
		e.preventDefault();
		e.stopPropagation();
		e1 = $.Event(e.type);
		e1.pageX = e.pageX;
		e1.which = e.which;
		panel.DOM.trigger(e1);
	});
}

// Η function "arxikiButton" δέχεται ένα panel και μια κατεύθυνση (1/-1) και επιστρέφει
// πλήκτρο επιστροφής στην αρχική σειρά εργαλείων. Αν είμαστε ήδη στην αρχική σειρά εργαλείων,
// το πλήκτρο επανακαθορίζει την κατεύθυνση εναλλαγής με βάση την παράμετρο "dir": αν η
// παράμετρος "dir" είναι 1 έχουμε κατεύθυνση εναλλαγής προς επόμενες ομάδες, ενώ αν η
// παράμετρος "dir" είναι -1 έχουμε κατεύθυνση εναλλαγής προς προηγούμενες ομάδες.

Kafenio.panel.arxikiButton = function(panel, dir) {
	return $('<img>').attr({
		src: Client.server + 'ikona/misc/mazema' + (dir > 0 ? 'Pano' : 'Kato') + '.png',
		title: 'Αρχική σειρά εργαλείων',
	}).
	data('check', function() {
		return(panel.omadaMax > 1);
	}).
	on('click', function(e) {
		Kafenio.inputRefocus(e);
		if (panel.adamo == 1) {
			if (panel.direction == dir) return;
			panel.direction = dir;
			panel.enalagiButtonDOM.strofi(90 * dir);
			return;
		}

		panel.refresh(1);
	});
}

// Η function "oplismos" αρματώνει τα πλήκτρα του panel με διαδικασίες που αφορούν
// κύρια στην αλλαγή στιλιστικών στοιχείων σε σχέση με το πέρασμα του δείκτη προς
// και εκτός των σχετικών εικονιδίων.

Kafenio.panel.oplismos = function(panel) {
	panel.DOM.children('img').
	addClass('VpanelIcon').
	on('mousedown', function(e) {
		e.stopPropagation();
	}).
	on('mouseenter', function(e) {
		e.stopPropagation();
		if (Kafenio.sekinisi) return;
		$(this).addClass('iconCandi');
	}).
	on('mouseleave', function(e) {
		e.stopPropagation();
		if (Kafenio.sekinisi) return;
		$(this).removeClass('iconCandi');
	});

	if (panel.hasOwnProperty('metakinisi')) panel.metakinisi();
	panel.refresh();
}

// Η function "refresh" δέχεται ως παράμετρο ένα panel και σκοπό έχει την εμφάνιση
// των εργαλείων της τρέχουσας ομάδας του panel, ελέγχοντας και τις συνθήκες μέσω
// τυχόν μεθόδου που παρέχεται στο "check" data tag του σχετικού εικονιδίου. Θυμίζουμε
// ότι η ομάδα εκάστου εργαλείου παρέχεται στο "omada" data tag του σχετικού εικονιδίου.
// Αν κάποιο εργαλείο στερείται ομάδας, τότε εμφανίζεται σε όλες τις ομάδες, εφόσον
// βέβαια η συνθήκες ("check") το επιτρέπουν.

Kafenio.panel.refresh = function(panel) {
	panel.DOM.children('img').each(function() {
		var omada, ok, check, refresh;

		omada = $(this).data('omada');
		ok = (omada === undefined) || (omada === panel.adamo);
		if (ok && ((check = $(this).data('check')) !== undefined)) ok = check();

		// Αν κάποιο εργαλείο έχει data tag "refresh", τότε αυτό περιέχει μέθοδο
		// σχηματισμού/επανασχηματισμού του εργαλείου και πρέπει να εκτελείται
		// κατά το refresh του panel.

		refresh = $(this).data('refresh');
		if (refresh) refresh($(this));

		$(this).css('display', ok ? 'block' : 'none');
	});
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Kafenio.panel.pliktro = {};

Kafenio.panel.pliktro.adsSwitch = function(omada) {
	return $('<img>').data('omada', omada).attr({
		src: Client.server + 'ikona/panel/misc/adsHide.png',
		title: 'Απόκρυψη διαφημίσεων',
	}).
	data('refresh', function(img) {
		if (Kafenio.flags.diafimisi) img.attr({
			src: Client.server + 'ikona/panel/misc/adsHide.png',
			title: 'Απόκρυψη διαφημίσεων',
		});
		else img.attr({
			src: Client.server + 'ikona/panel/misc/adsShow.png',
			title: 'Εμφάνιση διαφημίσεων',
		});
	}).
	on('click', function(e) {
		Kafenio.inputRefocus(e);
		Kafenio.flags.diafimisi = !Kafenio.flags.diafimisi;
		if (Kafenio.flags.diafimisi) $('#diafimisi').slideDown();
		else $('#diafimisi').slideUp();
		Kafenio.kpanel.refresh();
		Kafenio.cpanel.refresh();
	});
}

Kafenio.panel.pliktro.motdSwitch = function(omada) {
	return $('<img>').data('omada', omada).attr({
	}).
	data('refresh', function(img) {
		if (Kafenio.flags.motd) img.attr({
			src: Client.server + 'ikona/panel/misc/motdHide.png',
			title: 'Απόκρυψη ενημερωτικών μηνυμάτων',
		});
		else img.attr({
			src: Client.server + 'ikona/panel/misc/motdShow.png',
			title: 'Εμφάνιση ενημερωτικών μηνυμάτων',
		});
	}).
	on('click', function(e) {
		Kafenio.inputRefocus(e);
		Kafenio.flags.motd = !Kafenio.flags.motd;
		if (Kafenio.flags.motd) $('#motd').slideDown();
		else $('#motd').slideUp();
		Kafenio.kpanel.refresh();
		Kafenio.cpanel.refresh();
	});
}
